'''
Author: duliang thinktanker@163.com
Date: 2025-10-07 22:38:23
LastEditors: duliang thinktanker@163.com
LastEditTime: 2025-10-07 22:42:46
FilePath: 
Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
'''
import librosa
import soundfile as sf
import numpy as np


def cut_audio(input_file, output_file, start_time, end_time):
    """
    截取音频文件的指定时间段
    
    参数:
    input_file: 输入音频文件路径
    output_file: 输出音频文件路径
    start_time: 开始时间(秒)
    end_time: 结束时间(秒)
    
    返回:
    output_file: 输出文件路径
    """
    # 加载音频文件，sr=None表示保持原始采样率
    y, sr = librosa.load(input_file, sr=None)

    # 计算开始和结束的样本点
    start_sample = int(start_time * sr)
    end_sample = int(end_time * sr)

    # 截取音频数据
    y_cut = y[start_sample:end_sample]

    # 保存截取后的音频，使用原始采样率
    sf.write(output_file, y_cut, sr)

    print(f"音频已截取并保存到 {output_file}")
    return output_file


def cut_audio_by_samples(input_file, output_file, start_sample, end_sample):
    """
    根据样本点截取音频
    
    参数:
    input_file: 输入音频文件路径
    output_file: 输出音频文件路径
    start_sample: 开始样本点
    end_sample: 结束样本点
    
    返回:
    output_file: 输出文件路径
    """
    # 加载音频文件
    y, sr = librosa.load(input_file, sr=None)

    # 截取音频数据
    y_cut = y[start_sample:end_sample]

    # 保存截取后的音频
    sf.write(output_file, y_cut, sr)

    print(f"音频已截取并保存到 {output_file}")
    return output_file


# 示例用法
if __name__ == "__main__":
    # 示例: 截取第5秒到第10秒的音频
    cut_audio("test.mp3", "test2.mp3", 5, 10)
    # pass